home *** CD-ROM | disk | FTP | other *** search
- #include <math.h>
- #include "Warp.h"
-
- #define kNumOfStars 70
- #define kProjDistance 450
- #define kLargeStar 0
- #define kSmallStar 1
-
- Star gStarField [kNumOfStars];
- int gVelocity;
- Point gOrigin;
- RgnHandle gOldGrayRgn;
- short gOldMBarHeight;
- WindowPtr gWindow;
- RGBColor starColor;
- Rect starRect;
- long int newLeft, newTop;
- EventRecord theEvent;
- Boolean doneFlag;
-
- void main (void)
- {
- short loop;
- OSErr error;
- SysEnvRec theWorld;
-
- error = SysEnvirons(1, &theWorld);
- if (theWorld.hasColorQD == false)
- {
- SysBeep(50);
- ExitToShell(); /* If no color QD, we must leave. */
- }
-
- InitToolbox ();
- InitStarField ();
- HideCursor ();
-
- do
- {
- WaitNextEvent(everyEvent, &theEvent, 0L, 0L);
- switch (theEvent.what)
- {
- case mouseDown:
- do
- {
- AnimateStarField ();
- } while (Button ());
- break;
-
- case mouseUp:
- doneFlag = true;
- break;
- }
- } while (! doneFlag);
-
- ShowCursor ();
- }
-
- void InitToolbox (void)
- {
- EventRecord event;
- short count;
- Rect mBarRect;
- RgnHandle mBarRgn;
-
- InitGraf ((Ptr) &qd.thePort);
- InitFonts ();
- InitWindows ();
- InitMenus ();
- TEInit ();
- InitDialogs (nil);
- InitCursor ();
-
- GetDateTime((unsigned long*) &qd.randSeed);
-
- for (count = 1; count <= 3; ++count)
- EventAvail (everyEvent, &event);
-
- gOldMBarHeight = GetMBarHeight ();
- GetMBarHeight () = 0;
-
- gWindow = NewCWindow (nil,
- &screenBits.bounds,
- "\p",
- true,
- plainDBox,
- (WindowPtr) -1,
- false,
- 0);
-
- SetRect (&mBarRect, screenBits.bounds.left, screenBits.bounds.top,
- screenBits.bounds.right, screenBits.bounds.top + gOldMBarHeight);
-
- mBarRgn = NewRgn ();
- RectRgn (mBarRgn, &mBarRect);
- UnionRgn (gWindow->visRgn, mBarRgn, gWindow->visRgn);
- DisposeRgn (mBarRgn);
- SetPort (gWindow);
- FillRect (&gWindow->portRect, black);
- }
-
- void InitStarField (void)
- {
- short loop;
-
- starColor.red = Random();
- starColor.green = Random();
- starColor.blue = Random();
-
- RGBForeColor (&starColor);
-
- gVelocity = 6;
- gOrigin.h = (screenBits.bounds.right - screenBits.bounds.left) / 2;
- gOrigin.v = (screenBits.bounds.bottom - screenBits.bounds.top) / 2;
-
- for (loop = 0; loop < kNumOfStars; loop++)
- {
- CreateStar (&gStarField [loop]);
- }
- }
-
- void AnimateStarField (void)
- {
- short loop;
- Point location;
-
- for (loop = 0; loop < kNumOfStars; loop++)
- {
- location = Project (gStarField [loop]);
-
- // RGBForeColor (&starColor);
- ForeColor (blackColor);
-
- if (gStarField [loop].size == kLargeStar)
- DrawLargeStar (location);
- else
- DrawSmallStar (location);
-
- AnimateStar (&gStarField [loop]);
-
- location = Project (gStarField [loop]);
- // RGBForeColor (&starColor);
- ForeColor (whiteColor);
-
- if (gStarField [loop].size == kLargeStar)
- DrawLargeStar (location);
- else
- DrawSmallStar (location);
- }
- }
-
- void DrawLargeStar (Point aPt)
- {
- Rect starRect;
-
- starRect.left = aPt.h - 1;
- starRect.right = aPt.h + 1;
- starRect.top = aPt.v - 1;
- starRect.bottom = aPt.v + 1;
-
- PaintRect (&starRect);
-
- RGBForeColor (&starColor);
- }
-
- void DrawSmallStar (Point aPt)
- {
- MoveTo (aPt.h, aPt.v);
- LineTo (aPt.h, aPt.v);
-
- RGBForeColor (&starColor);
- }
-
- Point Project (Star aStar)
- {
- Point starRect;
-
- starRect.h = aStar.x * kProjDistance / aStar.z + gOrigin.h;
- starRect.v = aStar.y * kProjDistance / aStar.z + gOrigin.v;
-
- return starRect;
- }
-
- void AnimateStar (Star *aStar)
- {
- aStar->z = aStar->z - gVelocity;
- if (aStar->z <= 0)
- CreateStar (aStar);
-
- aStar->x = aStar->x - 0;
- if (aStar->x <= 0)
- CreateStar (aStar);
-
- aStar->y = aStar->y - 0;
- if (aStar->y <= 0)
- CreateStar (aStar);
- }
-
- void CreateStar (Star *aStar)
- {
- aStar->x = GetRandom (0, gOrigin.h);
- if (GetRandom (0,1) == 0)
- aStar->x = -aStar->x;
-
- aStar->y = GetRandom (0, gOrigin.v);
- if (GetRandom (0,1) == 0)
- aStar->y = -aStar->y;
-
- aStar->z = GetRandom (0, 150) + 125;
-
- aStar->size = GetRandom (0,1);
- }
-
- unsigned short GetRandom(unsigned short min, unsigned short max)
- {
- unsigned short random;
- long range, starRect;
-
- random = Random();
- range = (max - min) + 1;
- starRect = (random * range) / 65536;
- random = starRect + min;
-
- return random;
- }
- /*
- void NewBall()
- {
- RGBColor starColor;
- Rect starRect;
- long int newLeft, newTop;
-
- starColor.red = Random();
- starColor.green = Random();
- starColor.blue = Random();
-
- RGBForeColor (&starColor);
-
- newTop = Random(); newLeft = Random();
- newTop = ((newTop+32767) * windRect.bottom)/65536;
- newLeft = ((newLeft+32767) * windRect.right)/65536;
-
- SetRect(&starRect,
- newLeft,
- newTop,
- newLeft + BallWidth,
- newTop + BallHeight);
-
- MoveTo(newLeft, newTop);
- PaintOval (&starRect);
- RGBForeColor(&starColor);
- }
- */